<?php
/*
 * @description: Модель для работы с лекциями
 * @copyright Copyright (c) 2012-2017 Marin V. , Tykva A. , Kozel R. , Sokolov D.
 * @version 1.0
 * @link http://lecturebox.ru
*/

class Model_Lecture
{
    protected $lecture_id;

    protected $_dbTable;
    protected $_row;
    
    protected $data;

    public function __construct($lecture_id=0)
    {
        $this->lecture_id = $lecture_id;
        $this->data = null;

        $this->_dbTable = new Model_DbTable_Lectures();
        if($lecture_id)
            $this->_row = $this->_dbTable->find($lecture_id)->current();
        else
            $this->_row = $this->_dbTable->createRow();

    }

    public function fill($data)
    {
        foreach ($data as $key => $value)
            if (isset($this->_row->$key))
                $this->_row->$key = $value;
    }

    public function save()
    {
        $was_id = $this->lecture_id;
        $this->_row->save();
        if($was_id == 0)
        {
            $this->lecture_id = $this->_dbTable->getAdapter()
                    ->lastInsertId('lecbox_lectures', 'lecture_id');
        }
    }
    
    public function getAllLectures()
    {
        return $this->_dbTable->fetchAll();
    } 
    
    public function getAllDoneLectures($writecode)
    {
        $select = $this->_dbTable->select();
        $select->where('writecode = ?', $writecode);
        return $this->_row = $this->_dbTable->fetchAll($select);
    }    
    
    public function getVideoByWriteCode($writecode)
    {
        $select = $this->_dbTable->select();
        $select->where('writecode = ?', $writecode);
        $this->_row = $this->_dbTable->fetchAll($select)->current();
    }
    
    public function getLectureById($id)
    {   
        $select = $this->_dbTable->select();
        $select->where('lecture_id = ?', $id);
        return $this->_row = $this->_dbTable->fetchAll($select);
    }
 
    public function delLecture($lecture_id)
    {   
        $data = array(
            'writecode' => 'dub'
        );
        
        $where = array(
            'lecture_id = ?' => $lecture_id
        );
        
        $this->_dbTable->update($data, $where);
    }
    
    public function delete()
    {
        $this->_row->delete();
    }

    //Getters and Setters

    public function __set($name, $val)
    {
        if (isset($this->_row->$name)) {
            $this->_row->$name = $val;
        }
    }

    public function __get($name)
    {
        if (isset($this->_row->$name)) {
            return $this->_row->$name;
        }
    }

//    public function getAllLectures()
//    {       
//        $select = $this->_dbTable->select();
//        $select->where('lecture_id = ?', $lecture_id);
//        return $this->_row = $this->_dbTable->fetchAll($select);
//        return $this->_dbTable->fetchAll('SELECT * FROM '
//               . TABLE_PREF . 'lectures ORDER BY date DESC;');
//    }
    
    public function sendNoticeEmail($email, $cid, $cname) 
    {
        $mail = new Model_Mail();
        $mail->addTo($email);
        $mail->setSubject('Уведомление о добавлении новой лекции');
        $mail->setBodyView('notice', array('cid' => $cid, 
                                            'cname' => $cname,
                                            'lid'=>$this->_row->lecture_id,
                                            'lname'=>$this->_row->title));
        $mail->send();
    }
    
//    public function getAll()
//    {       
//        $this->_row = $this->_dbTable->fetchAll();
//    }
    
    public function getCourseLectures($id)
    {
        $select = $this->_dbTable->select();
        $select->where('course_id = ?', $id);
        $select->where('writecode = ?', 'done');        
        return $this->_row = $this->_dbTable->fetchAll($select);
    }

    public function populateForm()
    {
        return $this->_row->toArray();
    }
    
    
    
    /**
     * Добавить в избранное
     * @param int $user_id - id пользователя
     */
//    public function add2favorites($user_id)
//    {
//        if($user_id<=0 || $this->lecture_id <= 0)
//            return false;
//
//        try
//        {
//            Zend_Db_Table::getDefaultAdapter()->insert(TABLE_PREF . 'favorites',
//                array(
//                    'lecture_id' => $this->lecture_id,
//                    'user_id' => $user_id
//                ));
//        }
//        catch (Exception $error)
//        {
//            //Допускаем ошибку повторной вставки - игнорируем её
//            if(!strpos($error->getMessage(), 'Duplicate entry'))
//                throw $error;
//        }
//        return true;
//    }

    /**
     * Убрать из избранного
     * @param int $user_id - id пользователя
     */
//    public function unfavorites($user_id)
//    {
//        if($user_id<=0 || $this->lecture_id <= 0)
//            return false;
//        
//        Zend_Db_Table::getDefaultAdapter()->delete(TABLE_PREF . 'favorites',
//            Zend_Db_Table::getDefaultAdapter()
//                ->quoteInto('lecture_id=? AND ', $this->lecture_id)
//            . Zend_Db_Table::getDefaultAdapter()
//                ->quoteInto('user_id=? ', $user_id)
//            );
//        
//        return true;
//    }

    /**
     * Удаление текущей работы 
     */
//    public function delete()
//    {
//        //удаляем из избранного у всех
//        Zend_Db_Table::getDefaultAdapter()->delete(TABLE_PREF . 'favorites',
//            Zend_Db_Table::getDefaultAdapter()
//                ->quoteInto('lecture_id=? ', $this->lecture_id));
//        //удаляем покупки этой работы
//        Zend_Db_Table::getDefaultAdapter()->delete(TABLE_PREF . 'sales',
//            Zend_Db_Table::getDefaultAdapter()
//                ->quoteInto('lecture_id=? ', $this->lecture_id));
//        //удаляем связи с тэгами
//        Zend_Db_Table::getDefaultAdapter()->delete(TABLE_PREF . 'works_tags',
//            Zend_Db_Table::getDefaultAdapter()
//                ->quoteInto('lecture_id=? ', $this->lecture_id));
//        //удаляем работу из БД
//        Zend_Db_Table::getDefaultAdapter()->delete(TABLE_PREF . 'works',
//            Zend_Db_Table::getDefaultAdapter()
//                ->quoteInto('lecture_id=? ', $this->lecture_id));
//        
//        //удаление файлов!
//        @unlink($filename);
//        @unlink($filename);
//    }

    /**
     * Удаление лекции по id
     * @param int $id - lecture_id
     */
//    public static function del($id)
//    {
//        $obj = new self($id);
//        return $obj->delete();
//    }

    /**
     * Получаем информацию из БД о данной лекции
     */
    public function getData()
    {
        if($this->data === null)
        {
            $this->data = Zend_Db_Table::getDefaultAdapter()->fetchRow(
                    'SELECT * FROM '
                        . TABLE_PREF . 'lectures WHERE lecture_id=? LIMIT 1;',
                    array($this->lecture_id));
        }
        return $this->data;
    }

    /**
     * Возвращает объект Zend_Paginator для вывода записей постранично
     * @param int $page
     * @param int $perPege
     * @return Zend_Paginator
     */
    public function getPaginatorRows($page = 1, $perPege = 10, $tag = 0, $cat = 0)
    {
        $adapter = new Model_Paginator_Page(Zend_Db_Table::getDefaultAdapter()->select());
     
        $adapter->tag = $tag;
        $adapter->cat = $cat;

        // Создаем Zend_Paginator - передаем в него полученый адаптер
        $paginator = new Zend_Paginator($adapter);
        $paginator->setCurrentPageNumber($page);
        $paginator->setItemCountPerPage($perPege);

        return $paginator;
    }

     /**
     * Возвращает объект Zend_Paginator для вывода популярных записей постранично
     * @param int $page
     * @param int $perPege
     * @return Zend_Paginator
     */
    public function getPaginatorPopRows($page = 1, $perPege = 10, $tag = 0, $cat = 0)
    {
        $adapter = new Model_Paginator_PagePop(Zend_Db_Table::getDefaultAdapter()->select());
     
        $adapter->tag = $tag;
        $adapter->cat = $cat;

        // Создаем Zend_Paginator - передаем в него полученый адаптер
        $paginator = new Zend_Paginator($adapter);
        $paginator->setCurrentPageNumber($page);
        $paginator->setItemCountPerPage($perPege);

        return $paginator;
    }   
    
    /**
     * Возвращает объект Zend_Paginator для вывода 1 страницы
     * @param type $id
     * @return Zend_Paginator
     */
    public function getPaginatorPageById($id)
    {
        $adapter = new Model_Paginator_Page(Zend_Db_Table::getDefaultAdapter()->select());
        $adapter->page_id = $id;

        $paginator = new Zend_Paginator($adapter);
        $paginator->setCurrentPageNumber(1);
        $paginator->setItemCountPerPage(1);

        return $paginator;
    }
    
    /**
     * Сохранение тэгов
     * @param array $tags
     */
//    public function saveTags($tags)
//    {
//        foreach ($tags as $tag)
//        {
//            $tag = strtolower(trim($tag));
//            if($tag)
//            {
//                $tag_id = Zend_Db_Table_Abstract::getDefaultAdapter()
//                        ->fetchOne('SELECT tag_id FROM '
//                                . TABLE_PREF . 'tags '
//                                . 'WHERE tag = ? LIMIT 1;', $tag);
//
//                if(!$tag_id)
//                {
//                    Zend_Db_Table_Abstract::getDefaultAdapter()->insert(
//                        TABLE_PREF . 'tags',
//                        array ('tag'=>$tag));
//                    $tag_id = Zend_Db_Table_Abstract::getDefaultAdapter()
//                            ->lastInsertId(TABLE_PREF . 'tags');
//                }
//                try{
//                Zend_Db_Table_Abstract::getDefaultAdapter()->insert(
//                    TABLE_PREF . 'lectures_tags',
//                    array ('tag_id' => $tag_id,
//                        'lecture_id' => $this->lecture_id));
//                }
//                catch(Exception $e)
//                {}
//            }
//        }
//    }

}
